var websocket = null;
var host = document.location.host;
var judgeTemp = 0, loadTemp = 0;

function getUuid() {
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
function S4() {
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
/**
 * -------------------------------------------------------------------------------------------------------
 * 根据不同的http协议使用不同的websocket连接方式
 * @returns
 */
function getWSURL(){
	var urlPath = window.document.location.href;
	if(urlPath.indexOf("https:") != -1){
		return 'wss';
	}else{
		return 'ws';
	}
}
var wsUrl = getWSURL();
/**
 *  -------------------------------------------------------------------------------------------------------
 *  创建连接
 */
function createWebSorket(){
	try{
		//判断当前浏览器是否支持WebSocket 
		if('WebSocket' in window) {
			websocket = new WebSocket(wsUrl+'://' + host + '/human-resources-system-demo/webSocket/data/'+temp_uuid);
			initEventHandle();
		} else {
			alert('当前浏览器无法使用');
		}
	}catch(err){
		loadTemp++;
		if(loadTemp == 5){// 重连5 次不行就重新刷新浏览器
			window.location.reload();
		}
		console.log(err)
		console.log(err.message);
		setTimeout(function(){
			createWebSorket();// 由于网络问题可能无法连接（两秒后重新连接）
		}, 2000)
	}
}

// 初始化UUID连接
var temp_uuid = getUuid();
createWebSorket();

/**
 *  -------------------------------------------------------------------------------------------------------
 *  所有事件
 */
function initEventHandle(){
	//连接发生错误的回调方法 
	websocket.onerror = function() {
		judgeTemp = 1;
		console.log('连接失败');
	};
	//连接成功建立的回调方法 
	websocket.onopen = function() {
		console.log('连接成功');
	}
	//接收到消息的回调方法 
	websocket.onmessage = function(event) {
		//console.log('回馈消息');
		setMessageInnerHTML(event.data);
	}
	//连接关闭的回调方法 
	websocket.onclose = function() {
		console.log('连接关闭');
		if(judgeTemp != 1){
			createWebSorket();
		}
	}
	//监听窗口关闭事件，当窗口关闭时，主动去关闭websocket连接，防止连接还没断开就关闭窗口，server端会抛异常。 
	window.onbeforeunload = function() {
		judgeTemp = 1;
		closeWebSocket();
	}
}

/**
 *  -------------------------------------------------------------------------------------------------------
 *  关闭WebSocket连接
 */
function closeWebSocket() {
	websocket.close();
}

/**
 * -------------------------------------------------------------------------------------------------------
 * 接收消息
 */
var tempTimes,tempTimes2;
var mqttDate = Date.parse(new Date());
var mqttDate2 = Date.parse(new Date());
var mqttDate3 = Date.parse(new Date());
function setMessageInnerHTML(data) {
	judgeTemp = 1;
	var date = Date.parse(new Date());
	//var maxTime = parseInt((date - mqttDate) / 1000);
	var maxTime2 = parseInt((date - mqttDate2) / 1000);
	var maxTime3 = parseInt((date - mqttDate3) / 1000);
	//if(maxTime > 1){// 当多人考勤时，对比上一个人推送的时间相差有没有大于1秒，大于1秒就刷新
		closeRefresh();
		loadRecord();
		refreshAllData();
		mqttDate = date;
	//}
	if(maxTime2 > 5){// 离上一次推送刷新相差5秒刷新
		loadCount();
		mqttDate2 = date;
	}
	if(maxTime3 > 60){// 离上一次推送刷新相差60秒刷新
		refreshData(1);
		mqttDate3 = date;
	}
}

// 关闭刷新数据
function closeRefresh(){
	clearTimeout(tempTimes);
	clearTimeout(tempTimes2);
}
// 一分钟后刷新数据
function refreshData(type){
	loadPageData(); // 分包
	loadGroupData();// 班组
	if (!type){
		loadCount(); // 统计
	}
}
// 当没有推送消息后执行
function refreshAllData(){
	tempTimes = setTimeout("loadRecord()",1000*5);// 5秒人脸
	tempTimes2 = setTimeout("refreshData()",1000*60);// 一分钟其他所有数据
}
